1. Field of the Invention
The present invention relates generally to an improved data processing system. More specifically, the present invention is directed to a computer implemented method, system, and computer usable program code for upgrading a multi-tiered application distributed onto a set of virtual machines.
2. Description of the Related Art
Many modern software services provide complex functionality and have a variety of quality of service (QOS) requirements, such as latency bound and sustainable throughput. Such software services are usually implemented with a set of software pieces from many layers that interact with each other. Each piece of the software is called a software component.
A clustered software service, such as a Java 2 Enterprise Edition (J2EE®), may, for example, use Linux® as the operating system, java virtual machine (JVM®) on the next immediate layer above the operating system, WebSphere® proxies as content-aware routers, WebSphere® application servers as backend servers, WebSphere® deployment manager as a centralized administration point, Database 2 (DB2®) as a persistent data store, MQ Series® as an electronic messaging server, WebSphere® portal server as a Web portal server, WebSphere® process server as a process server, and other high level development environments. Moreover, this clustered software service may be deployed over a set of virtual machines within the cluster for scalability.
The configuration of a software service rarely remains unchanged throughout the lifetime of a service. A software service may frequently be upgraded for several reasons. For example, a software service may be upgraded because: 1) a software component requires a security patch to prevent security breaches; 2) a software component requires an upgrade to a newer version to provide additional features and/or increased performance; and 3) the software service needs to increase its scalability by adding or changing hardware and/or software components in the service in order to serve more users.
Upgrading a software service is a complex and error-prone task. The task of upgrading is error-prone because complex interactions and dependencies often exist among the software and hardware components in the software service. For example, changing only one part of a software service configuration, without fixing an existing dependency, may easily break the whole service.
Typically, current software service upgrades are performed manually. In other words, a system administrator figures out all the software and hardware component dependencies and then devises a plan to implement the upgrade. This manual process not only requires considerable expertise (i.e., knowledge of all the software components involved in the upgrade and an ability to foresee all the dependent changes) by the system administrator, it also requires a considerable amount of time because the software components need to be upgraded one by one, which results in considerable system downtime in some situations.
Therefore, it would be beneficial to have an improved computer implemented method, system, and computer usable program code for upgrading components of a software service application that are distributed across a set of virtual machines in a data processing system.